CORS কি এবং কেন এটি গুরুত্বপূর্ণ?

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এবং CORS (Cross-Origin Resource Sharing)
198

CORS (Cross-Origin Resource Sharing) হলো একটি নিরাপত্তা বৈশিষ্ট্য যা ব্রাউজারকে অনুমতি দেয় বা নিষিদ্ধ করে যে একটি ওয়েব পেজ অন্য একটি ডোমেইন থেকে রিসোর্স (যেমন API) অ্যাক্সেস করতে পারে। এটি মূলত এক ডোমেইন থেকে অন্য ডোমেইনে HTTP অনুরোধ পাঠানোর নিরাপত্তা নিয়ন্ত্রণ করে।

CORS কি?

CORS একটি ওয়েব নিরাপত্তা পদ্ধতি যা ওয়েব পেজগুলিকে অন্য ডোমেইন থেকে রিসোর্স অ্যাক্সেস করতে অনুমতি দেয়। এটি HTTP হেডারগুলির মাধ্যমে কাজ করে এবং ব্রাউজারকে জানায় কোন ডোমেইন (অথবা ওয়েব অ্যাপ্লিকেশন) অন্য ডোমেইন থেকে রিসোর্স (যেমন, API) অ্যাক্সেস করতে পারবে এবং কোন পদ্ধতি (GET, POST, PUT, DELETE ইত্যাদি) ব্যবহার করতে পারবে।

যখন ব্রাউজারের একটি ওয়েব পেজ একটি ডোমেইন থেকে আরেকটি ডোমেইনে অনুরোধ পাঠায়, তখন এটি CORS নীতি অনুসরণ করে। যদি CORS অনুমতি না দেয়, তবে ব্রাউজার একটি CORS error দেখাবে, যা প্রায়ই "No 'Access-Control-Allow-Origin' header is present on the requested resource" এর মতো একটি ত্রুটি হতে পারে।

CORS এর কাজের মূলনীতি:

  1. Same-Origin Policy (SOP):
    ব্রাউজারের Same-Origin Policy অনুযায়ী, একটি ওয়েব পেজ সাধারণত শুধুমাত্র একই ডোমেইন, প্রোটোকল, এবং পোর্ট থেকে রিসোর্স অ্যাক্সেস করতে পারে। তবে CORS এই সীমাবদ্ধতা লঙ্ঘন করতে সাহায্য করে, অর্থাৎ, একটি ওয়েব পেজ অন্য ডোমেইন থেকে রিসোর্স অ্যাক্সেস করতে পারবে যদি CORS সঠিকভাবে কনফিগার করা থাকে।
  2. Preflight Request:
    যদি একটি ক্লায়েন্ট (যেমন, ব্রাউজার) কোনো পদ্ধতি ব্যবহার করতে চায় যা নিরাপত্তার জন্য ঝুঁকি তৈরি করতে পারে (যেমন, PUT বা DELETE), তাহলে ব্রাউজার প্রথমে একটি preflight request পাঠায়। এটি সার্ভারকে জানায় যে আসল অনুরোধের আগে কিছু নির্দিষ্ট পদ্ধতি অনুমোদিত কিনা। সার্ভার যদি অনুমতি দেয়, তবে আসল অনুরোধ পাঠানো হয়।
  3. HTTP Headers:
    CORS কনফিগারেশন মূলত কয়েকটি HTTP হেডারের মাধ্যমে কাজ করে:
    • Access-Control-Allow-Origin: কোন ডোমেইনকে রিসোর্স অ্যাক্সেস করতে অনুমতি দেয়া হচ্ছে।
    • Access-Control-Allow-Methods: কোন HTTP মেথড (GET, POST, PUT, DELETE) অনুমোদিত।
    • Access-Control-Allow-Headers: কোন হেডার অনুমোদিত।
    • Access-Control-Allow-Credentials: এটি ব্রাউজারকে বলে যে ক্রেডেনশিয়াল (যেমন কুকি) পাঠানোর অনুমতি দেওয়া হবে কিনা।
    • Access-Control-Max-Age: এটি preflight request-এর জন্য সঞ্চিত সময় নির্ধারণ করে, যাতে পরবর্তী অনুরোধগুলির জন্য preflight চেক করার প্রয়োজন না হয়।

CORS কেন গুরুত্বপূর্ণ?

CORS গুরুত্বপূর্ণ কারণ এটি ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে নিরাপত্তা নিশ্চিত করতে সাহায্য করে, বিশেষত যখন আপনি একাধিক ডোমেইন (বা API) থেকে রিসোর্স অ্যাক্সেস করার চেষ্টা করেন। CORS মূলত পরবর্তী কারণে গুরুত্বপূর্ণ:

  1. নিরাপত্তা:
    CORS ওয়েব পেজগুলিকে একই উৎস নীতি (Same-Origin Policy) অনুসরণ করতে সাহায্য করে। এটি নিশ্চিত করে যে একটি ওয়েব অ্যাপ্লিকেশন অপরিচিত বা ক্ষতিকর উৎস থেকে রিসোর্স অ্যাক্সেস করতে পারবে না। যদি CORS সঠিকভাবে কনফিগার না করা হয়, তবে এটি Cross-Site Request Forgery (CSRF) আক্রমণ বা Cross-Site Scripting (XSS) আক্রমণের জন্য ঝুঁকি তৈরি করতে পারে।
  2. API অ্যাক্সেস:
    অনেক আধুনিক ওয়েব অ্যাপ্লিকেশন একটি বা একাধিক API সেবা ব্যবহার করে। CORS এটি নিশ্চিত করে যে শুধুমাত্র অনুমোদিত ডোমেইন বা ক্লায়েন্ট অ্যাপ্লিকেশনগুলি সেই API-কে অ্যাক্সেস করতে পারে।
  3. ব্রাউজারের নিরাপত্তা:
    ব্রাউজার নিজেই CORS নীতি কার্যকর করে, এটি সঠিকভাবে কনফিগার করা না হলে, ক্ষতিকর স্ক্রিপ্টগুলিকে অন্য ডোমেইনের API বা রিসোর্স অ্যাক্সেস করতে বাধা দেয়।
  4. বহু ডোমেইন ব্যবস্থাপনা:
    যদি আপনার অ্যাপ্লিকেশনটি Microservices architecture ব্যবহার করে থাকে এবং আপনার API গুলি বিভিন্ন ডোমেইন থেকে আসে, তাহলে CORS সঠিকভাবে কনফিগার করা প্রয়োজন। এটা বিভিন্ন সার্ভিস বা ডোমেইনের মধ্যে নিরাপদ যোগাযোগ নিশ্চিত করতে সাহায্য করে।

স্প্রিং সিকিউরিটিতে CORS কনফিগারেশন

স্প্রিং সিকিউরিটিতে CORS কনফিগারেশন করার জন্য, আপনি @EnableWebSecurity এবং WebSecurityConfigurerAdapter ব্যবহার করতে পারেন। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো:

CORS কনফিগারেশন উদাহরণ

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // Allow all endpoints
                .allowedOrigins("http://localhost:3000") // Allowed origin (e.g., React app)
                .allowedMethods("GET", "POST", "PUT", "DELETE") // Allowed methods
                .allowedHeaders("*") // Allow all headers
                .allowCredentials(true) // Allow credentials like cookies
                .maxAge(3600); // Cache preflight response for 1 hour
    }
}

স্প্রিং সিকিউরিটি CORS কনফিগারেশন

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors()
            .and()
            .authorizeRequests()
            .antMatchers("/**").permitAll() // Allow public access to all endpoints
            .anyRequest().authenticated();
    }

    @Bean
    public CorsConfig corsConfig() {
        return new CorsConfig();
    }
}

এখানে cors() মেথডটি স্প্রিং সিকিউরিটিতে CORS কনফিগারেশন সক্রিয় করতে ব্যবহৃত হয়।


উপসংহার

CORS (Cross-Origin Resource Sharing) একটি গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য যা ওয়েব অ্যাপ্লিকেশনগুলিকে একাধিক ডোমেইন বা API থেকে রিসোর্স অ্যাক্সেসের অনুমতি দেয় বা নিষেধ করে। এটি ব্রাউজারের মাধ্যমে কার্যকরী হয় এবং Cross-Site Request Forgery (CSRF) এবং Cross-Site Scripting (XSS) আক্রমণ থেকে সুরক্ষা প্রদান করে। স্প্রিং সিকিউরিটি এবং স্প্রিং MVC এর সাহায্যে সহজেই CORS কনফিগারেশন করা যায়, যা নিরাপদ এবং কার্যকর অ্যাপ্লিকেশন ডিজাইন করার জন্য অপরিহার্য।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...